package 二叉树;

/**
 * TODO
 *
 * @Description
 * @Author Lx
 * @Date 2024/7/5 11:34
 **/
public class 验证二叉搜索树 {


    //只能保证每俩层的子树是二叉搜索树，但不能保证整棵树都是二叉搜索树
    public boolean isValidBST01(TreeNode root,TreeNode parent) {
        if(root==null)return true;

        boolean leftflag=true;
        boolean rightflag=true;

        if(root.left!=null){
            leftflag=isValidBST01(root.left,root)&&(root.val>root.left.val);

            if(parent!=null&&parent.right==root)leftflag=leftflag&&(root.left.val>parent.val);
        }

        if(root.right!=null){
            rightflag=isValidBST01(root.right,root)&&(root.val<root.right.val);

            if(parent!=null&&parent.left==root)rightflag=rightflag&&(root.right.val<parent.val);
        }

        return leftflag&&rightflag;
    }



    public boolean isValidBST(TreeNode root) {

        return isValidBST01(root,null);
    }


    public static void main(String[] args) {

    }
}
